package main

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"os"
	"strings"
)

func main() {
	parse()
}

func parse() {
	// 打开scraper.json文件，这里使用了os库
	jsonFile, err := os.Open("G:\\workspace_gitee\\golang\\golang-web\\code_example\\work_with_go\\ch8_json\\ch8_1_json_practice\\scraper.json")
	// 如果文件打开失败，需要进行err的错误处理
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println("Successfully Opened scraper.json")
	// 最后要关闭文件
	defer jsonFile.Close()

	byteValue, _ := ioutil.ReadAll(jsonFile)

	var ag AutoGenerated

	json.Unmarshal(byteValue, &ag)

	for i := 0; i < len(ag.AutoSQL); i++ {
		endpoint := ag.AutoSQL[i].EndPoint // http://10.10.176.226:9100/metrics
		endpoints := strings.Split(endpoint, ":")
		ip := strings.Split(endpoints[1], "//")[1]
		write2file(ip)
	}
}

func write2file(ip string) {
	outfile := "G:\\workspace_gitee\\golang\\golang-web\\code_example\\work_with_go\\ch8_json\\ch8_1_json_practice\\output.txt"
	af, err := os.OpenFile(outfile, os.O_APPEND|os.O_WRONLY, 0644)
	if err != nil {
		fmt.Println("Error appending to file:", err)
	}
	defer af.Close()
	if _, err = af.WriteString(ip + "\n"); err != nil {
		fmt.Println("Error writing to file:", err)
	}
}

type AutoGenerated struct {
	AutoK8S2 []struct {
		EndPoint       string `json:"endPoint"`
		Changed        bool   `json:"changed"`
		Delete         bool   `json:"delete"`
		NewAdd         bool   `json:"newAdd"`
		ScrapeInterval int    `json:"scrapeInterval"`
		LastScrape     int    `json:"lastScrape"`
		ScrapeDuration int    `json:"scrapeDuration"`
		Error          string `json:"error"`
		GroupName      string `json:"groupName"`
		GroupID        int    `json:"groupId"`
		Database       string `json:"database"`
		Rp             string `json:"rp"`
		Instance       string `json:"instance"`
		ReadTimeout    int    `json:"readTimeout"`
		ConnectTimeout int    `json:"connectTimeout"`
		HealthCount    int    `json:"healthCount"`
		Alive          bool   `json:"alive"`
		KubernetesAuth bool   `json:"kubernetesAuth"`
		SnmpPort       string `json:"snmpPort"`
		SnmpIP         string `json:"snmpIp"`
		SnmpCommunity  string `json:"snmpCommunity"`
		SnmpOids       string `json:"snmpOids"`
		TargetType     string `json:"targetType"`
		InfluxDbIndex  int    `json:"influxDbIndex"`
		SeriesNo       string `json:"seriesNo"`
	} `json:"auto_k8s"`
	Auto17683 []struct {
		EndPoint       string `json:"endPoint"`
		Changed        bool   `json:"changed"`
		Delete         bool   `json:"delete"`
		NewAdd         bool   `json:"newAdd"`
		ScrapeInterval int    `json:"scrapeInterval"`
		LastScrape     int64  `json:"lastScrape"`
		ScrapeDuration int    `json:"scrapeDuration"`
		Error          string `json:"error"`
		GroupName      string `json:"groupName"`
		GroupID        int    `json:"groupId"`
		Database       string `json:"database"`
		Rp             string `json:"rp"`
		Instance       string `json:"instance"`
		ReadTimeout    int    `json:"readTimeout"`
		ConnectTimeout int    `json:"connectTimeout"`
		HealthCount    int    `json:"healthCount"`
		Alive          bool   `json:"alive"`
		KubernetesAuth bool   `json:"kubernetesAuth"`
		SnmpPort       string `json:"snmpPort"`
		SnmpIP         string `json:"snmpIp"`
		SnmpCommunity  string `json:"snmpCommunity"`
		SnmpOids       string `json:"snmpOids"`
		TargetType     string `json:"targetType"`
		InfluxDbIndex  int    `json:"influxDbIndex"`
		SeriesNo       string `json:"seriesNo"`
	} `json:"auto_176-83"`
	AutoSQL []struct {
		EndPoint       string `json:"endPoint"`
		Changed        bool   `json:"changed"`
		Delete         bool   `json:"delete"`
		NewAdd         bool   `json:"newAdd"`
		ScrapeInterval int    `json:"scrapeInterval"`
		LastScrape     int64  `json:"lastScrape"`
		ScrapeDuration int    `json:"scrapeDuration"`
		Error          string `json:"error"`
		GroupName      string `json:"groupName"`
		GroupID        int    `json:"groupId"`
		Database       string `json:"database"`
		Rp             string `json:"rp"`
		Instance       string `json:"instance"`
		ReadTimeout    int    `json:"readTimeout"`
		ConnectTimeout int    `json:"connectTimeout"`
		HealthCount    int    `json:"healthCount"`
		Alive          bool   `json:"alive"`
		KubernetesAuth bool   `json:"kubernetesAuth"`
		SnmpPort       string `json:"snmpPort"`
		SnmpIP         string `json:"snmpIp"`
		SnmpCommunity  string `json:"snmpCommunity"`
		SnmpOids       string `json:"snmpOids"`
		TargetType     string `json:"targetType"`
		InfluxDbIndex  int    `json:"influxDbIndex"`
		SeriesNo       string `json:"seriesNo"`
	} `json:"auto_sql"`
	AutoSnmpBychm100014 []struct {
		EndPoint       string `json:"endPoint"`
		Changed        bool   `json:"changed"`
		Delete         bool   `json:"delete"`
		NewAdd         bool   `json:"newAdd"`
		ScrapeInterval int    `json:"scrapeInterval"`
		LastScrape     int64  `json:"lastScrape"`
		ScrapeDuration int    `json:"scrapeDuration"`
		Error          string `json:"error"`
		GroupName      string `json:"groupName"`
		GroupID        int    `json:"groupId"`
		Database       string `json:"database"`
		Rp             string `json:"rp"`
		Instance       string `json:"instance"`
		ReadTimeout    int    `json:"readTimeout"`
		ConnectTimeout int    `json:"connectTimeout"`
		HealthCount    int    `json:"healthCount"`
		Alive          bool   `json:"alive"`
		KubernetesAuth bool   `json:"kubernetesAuth"`
		SnmpPort       string `json:"snmpPort"`
		SnmpIP         string `json:"snmpIp"`
		SnmpCommunity  string `json:"snmpCommunity"`
		SnmpOids       string `json:"snmpOids"`
		TargetType     string `json:"targetType"`
		InfluxDbIndex  int    `json:"influxDbIndex"`
		SeriesNo       string `json:"seriesNo"`
	} `json:"auto_snmp测试bychm100014"`
	AutoSpringMetrics []struct {
		EndPoint       string `json:"endPoint"`
		Changed        bool   `json:"changed"`
		Delete         bool   `json:"delete"`
		NewAdd         bool   `json:"newAdd"`
		ScrapeInterval int    `json:"scrapeInterval"`
		LastScrape     int64  `json:"lastScrape"`
		ScrapeDuration int    `json:"scrapeDuration"`
		Error          string `json:"error"`
		GroupName      string `json:"groupName"`
		GroupID        int    `json:"groupId"`
		Database       string `json:"database"`
		Rp             string `json:"rp"`
		Instance       string `json:"instance"`
		ReadTimeout    int    `json:"readTimeout"`
		ConnectTimeout int    `json:"connectTimeout"`
		HealthCount    int    `json:"healthCount"`
		Alive          bool   `json:"alive"`
		KubernetesAuth bool   `json:"kubernetesAuth"`
		SnmpPort       string `json:"snmpPort"`
		SnmpIP         string `json:"snmpIp"`
		SnmpCommunity  string `json:"snmpCommunity"`
		SnmpOids       string `json:"snmpOids"`
		TargetType     string `json:"targetType"`
		InfluxDbIndex  int    `json:"influxDbIndex"`
		SeriesNo       string `json:"seriesNo"`
	} `json:"auto_spring_metrics"`
	SelfMonitor []struct {
		EndPoint       string `json:"endPoint"`
		Changed        bool   `json:"changed"`
		Delete         bool   `json:"delete"`
		NewAdd         bool   `json:"newAdd"`
		ScrapeInterval int    `json:"scrapeInterval"`
		LastScrape     int64  `json:"lastScrape"`
		ScrapeDuration int    `json:"scrapeDuration"`
		Error          string `json:"error"`
		GroupName      string `json:"groupName"`
		GroupID        int    `json:"groupId"`
		Database       string `json:"database"`
		Rp             string `json:"rp"`
		Instance       string `json:"instance"`
		ReadTimeout    int    `json:"readTimeout"`
		ConnectTimeout int    `json:"connectTimeout"`
		HealthCount    int    `json:"healthCount"`
		Alive          bool   `json:"alive"`
		KubernetesAuth bool   `json:"kubernetesAuth"`
		SnmpPort       string `json:"snmpPort"`
		SnmpIP         string `json:"snmpIp"`
		SnmpCommunity  string `json:"snmpCommunity"`
		SnmpOids       string `json:"snmpOids"`
		TargetType     string `json:"targetType"`
		InfluxDbIndex  int    `json:"influxDbIndex"`
		SeriesNo       string `json:"seriesNo"`
	} `json:"self_monitor"`
}
